package events;

/**
* @brief Clase que implementa un listener de eventos distribuidos para un componente
* @author Carlos Rodriguez Dominguez
* @date 08/11/2008
*
* Para usar un eventlistener hay que sobrecargar la operacion check para 
* que compruebe si un evento debe ser tratado por ese listener concreto. 
* Sobrecargar la operacion action para que se ejecute una accion concreta.
* Al recibir un evento en el sistema, se asegura que si pasa el filtro
* impuesto por check_event, entonces se ejecuta la operacion action, siempre
* y cuando el componente asociado este activado para recibir y enviar
* eventos de forma colaborativa.
*/
public interface EventListener {
	/**
	* Comprueba si un evento esta asociado con este listener.
	* Es un metodo puramente virtual, con lo que debe implementarse
	* en las subclases de esta clase.
	*
	* @param evt Evento a comprobar
	* @return True si el evento puede tratarse con este listener.
	*         False en caso contrario.
	*/
	boolean check_event(Event evt);
	
	/**
	* Accion asociada con este listener.
	* Es un metodo puramente virtual, con lo que debe implementarse
	* en las subclases de esta clase.
	*
	* @param receiver Objeto que recibio el evento
	* @param data Evento recibido
	*/
	void action(Object receiver, Event data);
	
	/**
	* Obtiene el nombre del listener. Permite la comparacion
	* de listeners, con lo que debera ser unico en el sistema
	* para cada listener (no para cada instancia).
	*
	* @return Nombre del listener
	*/
	String name();
}
